define([
    'Util',
    'text!tpl/case/editCase.tpl',
    'select',
    'date',
    'form',
    'dialog',
    'jquery',
    'checkboxes',
    'validator',
    'loading',
    'upload',
    'list',
    'cookie',
    'inputTag',
    '../common/getPath',
    '../common/dateDiff',
    '../requirement/fileList',
    'comboSelect',
    'editor',
    '../common/dateFormat',
],
function (Util, tpl, Select, MyDate, Form, Dialog, $, Checkboxes, Validator, Loading, Upload, List, $cookie, inputTag, AjaxPath, computeDaysDelta, fileList, ComboSelect, Editor) {
    require(['style!css/style.css']);

    //系统变量-定义该模块的根节点
    var $el = null;
    var _indexModule = null,
        tabParent = null,
        editReqData = null,
        listData=null,
        list=null,
        dialog=null,
        caseValidation = null,
        editSubTaskMomeValidor=null,
        tagListSelect = null,
        linksToSelect = null,
        moduleListSelect = null,
        delFlag = false,
        tryPeopleData=null,       //分配弹框也要用经办人下拉框返回的数据；
        sysTemSelect = null,
        addReqType = null,        //用例类型；
        reqAttachmentIdList = [],  //附件ID集合
        reqAttachmentIdListName=[],
        statusChangeSelect = null,
        excutorChangeSelect= null,//分配弹框分配成功，页面经办人同步改变；
        
        addprioritySelsect = null,//优先级
        // presentPeopleSelect = null,
        sprintsChangeSelect = null,//迭代
        tagIdList = [],           //标签ID集合
        tagIdListName=[],
        comboSelect = null,
        loadingConfig=null;
        var editor =null;
            
        //系统变量-构造函数
        var initialize = function(indexModule, options, tabItem) {
            reqAttachmentIdList = [];  //数组清空；
            reqAttachmentIdListName=[]
            $el = $(tpl);
            _indexModule = indexModule;
            $(tabItem).on("tabActive", function() {
                tabItem.show(true); //刷新表单
            });
            createLoading();
            editReqData = options;
            listData = options;
            tabParent = tabItem;
            eventInit();
            this.content = $el;
            getEditReqData();

        };

        //业务代码-事件初始化
        var eventInit = function() {
            $el.on('click', '.addCaseBtn', saveRequiretValidation);
            $el.on('click', '.btnBack', back);
            $el.on('click', '.logListTab li', logListTab);       //点击日志tab
            $el.on('click', '.editAddMome', createReqMomeDialog);//点击备注按钮
            $el.on('click', '.t-list-title .tri', bindTableSwitch);//折叠
            $el.on('click', '.assDialog', createReqAssDialog);       //点击分配按钮
            $el.on('click', '.caseStatusButton a', bindEditTaskNextStatus);//点击状态按钮；
            $el.on('click', 'a.setpOldId', listButton)                     //日志中点击表格1；
            $el.on('click', 'a.setpNewId', listButton) 

        };
        var back = function() {
            tabParent.switchTab(listData.menuId);
            tabParent.destroy("editCaseTab");
        };
        // var switchTab = function(index) {
        //     $(".t-tabs-items li", $el).eq(index).trigger('click');
        // }
        //获取页面初始化数据
        var getEditReqData = function(){
            Util.ajax.getJson(AjaxPath.demand + '/testCases/'+ editReqData.id, {}, function(result, isok){
                if(result.returnCode==="0000"){
                    editReqData = result.beans;
                    inSelect();           //下拉框
                    fileUp();             //附件上传
                    fileTable();           //上传附件初始化，修改
                    selMul();             //input多选框
                    addCaseValidation();  //表单验证
                    testStep();           //富文本
                    formInit();            //初始化
                    initList();
                    getEditTaskNextStatus();//获取状态按钮；
                    
                }else {
                    new Dialog({
                        mode: 'confirm', // 对话框模式，默认normal标准|confirm浮动层|confirm确认对话框
                        title:'提示',
                        width: 300, //对话框宽度，可选项。normal默认值为600，confirm默认值为300，tips默认值为240
                        height: 120, //对话框高度，可选项。normal默认值为400，confirm默认值为180，tips默认值为80
                        cancelDisplay: false, //是否显示取消按钮（强制执行，可在confirm模式下生效），可选项。 默认true(显示)
                        modal:true,
                        content: '<div style="text-align:center;margin-top:50px">'+result.returnMessage+'</div>' ,// 对话框内容，可以是字符串、html片段、或dom对象,默认为loading状态（点组成的圈）
                    });
                }
            });
        };
        //初始化表单
        var formInit = function(){
            $("input[name='caseName']", $el).val(editReqData.caseName);
        
            $("textarea[name='caseDescription']", $el).val(editReqData.caseDescription);
            $(".editReqPosition", $el).html(editReqData.projectName);     
        };

        //下拉框
        var inSelect = function() {
            //用例类型
            Util.ajax.getJson( AjaxPath.project+"/dropdown?modual=testcase&type=caseType", {}, function(result, isok){
                addReqType = new Select({
                    el:$("#caseType", $el),       //要绑定的容器
                    ajax:{    //所有jquery.ajax的配置项均可配置，这些配置将替换底层组件的配置，<span class="s">慎用</span>
                        method:'GET'
                    },
                    label:'<i style="color:red;padding:2px;">*</i>用例类型:', //下拉框单元左侧label文本，可不配置
                    selectText:false,       //是否显示  ‘选择|清除’  模式
                    name:'caseType',    //下拉框单元右侧下拉框名称
                    disabled:false,     //组件是否被禁用
                    topOption:"请选择", //设置最顶部option的text属性
                    value:'',//初始选中项设置 默认是按value，如果你想按id设置 也可以 value:[&quot;id&quot;,1],这样设置
                    textField:"value",   //设置下拉框内容，填写数据中对应的字段名
                    valueField:"key",//设置下拉框value，填写数据中对应的字段名
                    datas: result.beans,         //数据源
                    loadAtClick:false,// true--第一次点击时渲染|false或不配置--初始化时渲染
                    dataReady:function(){
                        console.log("获取工作项类型");
                    }
                });

                addReqType.setValue(['value',editReqData.caseType]);
            });
            //状态
            Util.ajax.getJson( AjaxPath.project+'/dropdown?modual=testCase&type=caseStatus&flowSwitch=true&systemId='+editReqData.projectId+'&flowFrom='+listData.caseStatus, {}, function(result, isok){
                statusChangeSelect = new Select({
                    el:$("#statusList", $el),       //要绑定的容器
                    ajax:{    //所有jquery.ajax的配置项均可配置，这些配置将替换底层组件的配置，<span class="s">慎用</span>
                        method:'GET'
                    },
                    label:'<i style="color:red;padding:2px;">*</i>状态:', //下拉框单元左侧label文本，可不配置
                    selectText:false,       //是否显示  ‘选择|清除’  模式
                    name:'caseStatus',    //下拉框单元右侧下拉框名称
                    disabled:false,     //组件是否被禁用
                    topOption:"请选择", //设置最顶部option的text属性
                    value:'',//初始选中项设置 默认是按value，如果你想按id设置 也可以 value:[&quot;id&quot;,1],这样设置
                    textField:"value",   //设置下拉框内容，填写数据中对应的字段名
                    valueField:"key",//设置下拉框value，填写数据中对应的字段名
                    datas: result.beans,         //数据源
                    loadAtClick:false,// true--第一次点击时渲染|false或不配置--初始化时渲染
                    dataReady:function(){
                        console.log("获取状态")
                    }
                });
                statusChangeSelect.setValue(['key',editReqData.caseStatus]);
            });
            //经办人
            Util.ajax.getJson( AjaxPath.project+'/dropdown?modual=project&type=userId&systemId='+editReqData.projectId, {}, function(result, isok){
                tryPeopleData=result.beans;//分配弹框也要用；
                excutorChangeSelect = new Select({
                    el:$("#excutorList", $el),       //要绑定的容器
                    ajax:{    //所有jquery.ajax的配置项均可配置，这些配置将替换底层组件的配置，<span class="s">慎用</span>
                        method:'GET'
                    },
                    label:'<i style="color:red;padding:2px;">*</i>经办人:', //下拉框单元左侧label文本，可不配置
                    selectText:false,       //是否显示  ‘选择|清除’  模式
                    name:'excutor',    //下拉框单元右侧下拉框名称
                    disabled:false,     //组件是否被禁用
                    topOption:"请选择", //设置最顶部option的text属性
                    value:'',//初始选中项设置 默认是按value，如果你想按id设置 也可以 value:[&quot;id&quot;,1],这样设置
                    textField:"value",   //设置下拉框内容，填写数据中对应的字段名
                    valueField:"key",//设置下拉框value，填写数据中对应的字段名
                    datas: result.beans,         //数据源
                    loadAtClick:false,// true--第一次点击时渲染|false或不配置--初始化时渲染
                    dataReady:function(){
                        console.log("经办人");
                    }
                });
                excutorChangeSelect.setValue(['key',editReqData.excutor]);
            });

            //迭代
            Util.ajax.getJson( AjaxPath.project+'/dropdown?modual=publish&type=sprints&systemId='+editReqData.projectId, {}, function(result, isok){
                sprintsChangeSelect = new Select({
                    el:$("#sprintList", $el),       //要绑定的容器
                    ajax:{    //所有jquery.ajax的配置项均可配置，这些配置将替换底层组件的配置，<span class="s">慎用</span>
                        method:'GET'
                    },
                    label:'<i style="color:red;padding:2px;"></i>迭代:', //下拉框单元左侧label文本，可不配置
                    selectText:false,       //是否显示  ‘选择|清除’  模式
                    name:'sprintId',    //下拉框单元右侧下拉框名称
                    disabled:false,     //组件是否被禁用
                    topOption:"请选择", //设置最顶部option的text属性
                    value:'',//初始选中项设置 默认是按value，如果你想按id设置 也可以 value:[&quot;id&quot;,1],这样设置
                    textField:"value",   //设置下拉框内容，填写数据中对应的字段名
                    valueField:"key",//设置下拉框value，填写数据中对应的字段名
                    datas: result.beans,         //数据源
                    loadAtClick:false,// true--第一次点击时渲染|false或不配置--初始化时渲染
                    dataReady:function(){
                        console.log("获取迭代");
                    }
                });
                if(editReqData.sprintId){
                sprintsChangeSelect.setValue(['key',editReqData.sprintId]);
                }else {
                    sprintsChangeSelect.setValue(0);
                }
            });

            //优先级
            Util.ajax.getJson( AjaxPath.project+"/dropdown?modual=testcase&type=priority", {}, function(result, isok){
                addprioritySelsect = new Select({
                    el:$("#priorityList", $el),       //要绑定的容器
                    ajax:{    //所有jquery.ajax的配置项均可配置，这些配置将替换底层组件的配置，<span class="s">慎用</span>
                        method:'GET'
                    },
                    label:'<i style="color:red;padding:2px;">*</i>优先级:', //下拉框单元左侧label文本，可不配置
                    selectText:false,       //是否显示  ‘选择|清除’  模式
                    name:'priority',    //下拉框单元右侧下拉框名称
                    disabled:false,     //组件是否被禁用
                    topOption:"请选择", //设置最顶部option的text属性
                    value:'',//初始选中项设置 默认是按value，如果你想按id设置 也可以 value:[&quot;id&quot;,1],这样设置
                    textField:"value",   //设置下拉框内容，填写数据中对应的字段名
                    valueField:"key",//设置下拉框value，填写数据中对应的字段名
                    datas: result.beans,         //数据源
                    loadAtClick:false,// true--第一次点击时渲染|false或不配置--初始化时渲染
                    dataReady:function(){
                        console.log("优先级")
                    }
                });
                addprioritySelsect.setValue(['value',editReqData.priority]);
            });
        };


        //多选下拉框
        var selMul = function(){
            //链接的缺陷
            Util.ajax.getJson(AjaxPath.project+'/dropdown?modual=require&type=linkInfo&systemId='+editReqData.projectId, {}, function(result, isok){
                linksToSelect = new inputTag({
                    el:$('#linksTo', $el),       //必填 要绑定的容器
                    datas: result.beans,           //必填 数据源
                    addTag: false,             //必填  是否可以添加新标签
                    textField: 'value',
                    valueField: 'key',
                    placeholder:'请输入要链接的工作项',
                    optionItemClick:function(){ //必填 点击时获取当前点击项的数据
                        return linksToSelect.getSelected();
                    }
                });
                linksToSelect.checkSelectTag(editReqData.linkInfos, "key");
            });
            //标签
            Util.ajax.getJson(AjaxPath.project+'/dropdown?modual=require&type=tag', {}, function(result, isok){
                tagListSelect = new inputTag({
                    el:$('#tagList', $el),       //必填 要绑定的容器
                    datas: result.beans,           //必填 数据源
                    addTag: true,             //必填  是否可以添加新标签
                    textField: 'value',
                    valueField: 'key',
                    placeholder:'请输入标签',
                    maxlength:'20',
                    optionItemClick:function(){ //必填 点击时获取当前点击项的数据
                        return tagListSelect.getSelected();
                    }
                });
                tagListSelect.checkSelectTag(editReqData.tagList,"id");
            });
            //模块
            Util.ajax.getJson(AjaxPath.project+'/dropdown?modual=require&type=module&systemId='+editReqData.projectId, {}, function(result, isok){
                moduleListSelect = new inputTag({
                    el:$('#moduleList', $el),       //必填 要绑定的容器
                    datas: result.beans,           //必填 数据源
                    addTag: false,             //必填  是否可以添加新标签
                    textField: 'value',
                    valueField: 'key',
                    placeholder:'请选择模块',
                    optionItemClick:function(){ //必填 点击时获取当前点击项的数据
                        return moduleListSelect.getSelected();
                    }
                });
                moduleListSelect.checkSelectTag(editReqData.moduleList, "id");
            });
        };

        //附件
        var fileUp = function () {
            var uploadConfig = {
                el: $("#upload", $el), //组件绑定的容器
                className: 'upload', //组件外围的className
                url: AjaxPath.project+'/uploadFile/upload', //组件上传的后台接口
                // url: fileAjaxPath, //组件上传的后台接口
                // deleteUrl: 'data/upload.json?name=[name]', //组件上传的后台接口
                paramName:'textFile',
            };
            var filesUpload = new Upload(uploadConfig);


            filesUpload.on('submit',function(e,data){
                //formData的数据会和二进制数据一起提交到服务端
                data.formData = { creator:$cookie.get("userId"), businessType:'testcase', type:1 };
                // data.formData = { creator:1, businessType:'require', type:1 };
            });

            filesUpload.on('done',function(e,data){
                reqAttachmentIdList.push(data.result.files[0].attId);
                reqAttachmentIdListName.push(data.result.files[0].name);
            });
            filesUpload.on('remove',function(e,data){
                if(data.attId){
                    delFlag=true;
                };
                uploadDelete(e,data) //传入的data是个的对象；
                //e新增自定义remove方法，可根据服务端文件处理结果删除文件列表中的当前行
            });

            filesUpload.on('download',function(e,data){
                console.log(data)
                if(data.attId){
                    delFlag=true;
                    data=data.attId;
                    uploadDown(e,data);
                };

            });
        };

        function uploadDelete(e,data){
            //e新增自定义remove方法，可根据服务端文件处理结果删除文件列表中的当前行
            if(delFlag){
                new Dialog({
                    title: '提示', //弹窗标题，
                    content: '<div style="text-align:center;margin-top:50px">确定要删除该附件吗？</div>', //弹窗内容，可以是字符串、html代码段,tpl对象。默认为loading状态（由点组成的圈。大段代码建议使用 tpl。
                    okValue: '确&nbsp;&nbsp;定', //确定按钮的文本 默认是 ‘ok’
                    ok: function() {
                        // Util.ajax.getJson(AjaxPath.project+'/attachment/delete/'+data.attId, {}, function(result, isok){
                        //     if(result.returnCode==='0000'){
                                reqAttachmentIdList = $.grep(reqAttachmentIdList,function(i,n){
                                    return i!= data.attId;
                                });//筛选删除的留下剩下的
                                console.log("name之前"+reqAttachmentIdListName)
                                reqAttachmentIdListName = $.grep(reqAttachmentIdListName,function(i,n){
                                    return i!= data.name;
                                });
                                // console.log(data)   
                                // console.log(reqAttachmentIdList);
                                // console.log(reqAttachmentIdListName);
                                e.remove();
                            //     new Dialog({
                            //         mode: 'tips',
                            //         delayRmove:3, //延迟删除秒数设定 tips默认3秒,非tips默认不关闭。
                            //         tipsType:'tips', //tips类型；可选 success | error，默认普通tips。
                            //         maxWidth:'226px', //设置tips对话框的最大宽度,默认为226px。仅在tips对话框下生效，该项存在时，width属性将失效。
                            //         content: '删除附件成功！'
                            //     });
                            // }else{
                            //     new Dialog({
                            //         mode: 'tips',
                            //         delayRmove:3, //延迟删除秒数设定 tips默认3秒,非tips默认不关闭。
                            //         tipsType:'tips', //tips类型；可选 success | error，默认普通tips。
                            //         maxWidth:'226px', //设置tips对话框的最大宽度,默认为226px。仅在tips对话框下生效，该项存在时，width属性将失效。
                            //         content: '删除附件失败！'
                            //     });
                            // }
                            return true;
                        // });
                    },
                    cancel: function() {},
                    cancelValue: '取&nbsp;&nbsp;消', //取消按钮的文本 默认是 ‘关闭’
                    width: 300,
                    height: 120,
                    modal:true,
                });
            }else{
                e.remove();
            }
        };
        function uploadDown(e,data){
            //e新增自定义remove方法，可根据服务端文件处理结果删除文件列表中的当前行
            if(delFlag){
                window.location.href=AjaxPath.project+'/uploadFile/download?id='+data;
            }else{

            }
        };
        //filelist==del,附件初始化；
        var fileTable = function(){
            Util.ajax.getJson(AjaxPath.project + '/attachment?businessId='+ editReqData.id +'&businessType=testcase', {}, function(result, isok){
                $('.files').prepend(fileList(result.beans,reqAttachmentIdList));
                //附件名集合；
                $(result.beans).each(function (index,item) {
                    if(item.fileName){
                        reqAttachmentIdListName.push(item.fileName);
                    }
                });console.log(reqAttachmentIdListName);
                $('#upload .uploadDelete').click(function(){
                    var deldata={};
                        deldata.attId=$(this).attr('data')-0; //this的ID
                        //this的名字；
                        console.log(result.beans);
                        $(result.beans).each(function (index,item) {
                            if(item.id==deldata.attId){
                                deldata.name=item.fileName;
                            }
                        });

                    delFlag=true;
                    var delNode=$(this).parent().parent().parent('.template-upload');
                    uploadDelete(delNode,deldata);
                });
            })
        };
        
        //表单验证
        var addCaseValidation = function() {
            caseValidation = new Validator({
                el: $(".addCaseForm", $el),
                submitBtn: $(".addCaseBtn"), //触发验证的按钮，可不配置
                dialog: true, //是否弹出验证结果对话框
                pattern: { numberThree: "^(\\d+\\.\\d{1,1}|\\d+)$" },
                rules: {
                    caseName: "required",
                    systemId: "required",
                    caseType: "required",
                    excutor: "required",
                    priority: "required",
                    caseStatus: "required"
                },
                messages: {
                    caseName: {
                        required: "用例名称不能为空！"
                    },
                    systemId: {
                        required: "归属项目不能为空！"
                    },
                    caseType: {
                        required: "用例类型不能为空！"
                    },
                    excutor: {
                        required: "经办人不能为空！"
                    },
                    priority: {
                        required: "优先级不能为空！"
                    },
                    caseStatus: {
                        required: "状态不能为空！"
                    }
                }
            });
        };
        
        //保存按钮
        var saveRequiretValidation = function() {
            var addTag = {
                createPerson:$cookie.get("userId"),
                tags:tagListSelect.getCheckSelectTag(),
                createModule:'testcase'
            };

            if(caseValidation.form()) {
                //创建新标签
                Util.ajax.postJson(AjaxPath.project+'/tag',JSON.stringify(addTag), function(tagResult, isok) {
                    if(tagResult.returnCode==="0000") {
                        tagIdList = [];
                        tagIdListName = [];
                        $(tagResult.beans).each(function (index,item) {
                            tagIdList.push(item.id ? item.id : item.key );
                            tagIdListName.push(item.value);
                        });
                        saveAddRequrie();
                    } else {
                        new Dialog({
                            mode: 'confirm', // 对话框模式，默认normal标准|confirm浮动层|confirm确认对话框
                            title:'提示',
                            width: 300, //对话框宽度，可选项。normal默认值为600，confirm默认值为300，tips默认值为240
                            height: 120, //对话框高度，可选项。normal默认值为400，confirm默认值为180，tips默认值为80
                            cancelDisplay: false, //是否显示取消按钮（强制执行，可在confirm模式下生效），可选项。 默认true(显示)
                            modal:true,
                            content: '<div style="text-align:center;margin-top:50px">'+tagResult.returnMessage+'</div>' ,// 对话框内容，可以是字符串、html片段、或dom对象,默认为loading状态（点组成的圈）
                        });
                    }
                },"application/json");
            } else {
                console.log('验证失败');
            }
        };
        var saveAddRequrie = function(e) {
            var saveAddRequrieDia = null;
            var handLoading = new Loading(loadingConfig);
            var addReqData = Form.serialize($('.addCaseForm', $el));
            // addReqData.presentPeople = presentPeopleSelect.getSelected().key;
            // addReqData.systemId = sysTemSelect.getSelected().key;

            addReqData.caseStatusName=statusChangeSelect.getSelected('value');
            addReqData.caseTypeName=addReqType.getSelected('value');
            addReqData.sprintName=($.type(sprintsChangeSelect.getSelected('value'))=='object')?'':sprintsChangeSelect.getSelected('value');
            addReqData.priorityName=addprioritySelsect.getSelected('value');
            addReqData.excutorName=excutorChangeSelect.getSelected('value');

            addReqData.linkIdAndTypes = linksToSelect.getCheckSelectTag('key'); //多选链接到
            addReqData.linkName = linksToSelect.getCheckSelectTag('value').join(' ');
             
            addReqData.tagIdList = tagIdList;                                   //多选标签
            addReqData.typeName = tagIdListName.join(' ');
            
            addReqData.moduleIdList = moduleListSelect.getCheckSelectTag('key');//多选模块
            addReqData.moduleName = moduleListSelect.getCheckSelectTag('value').join(' ');
            addReqData.attachmentIdList = reqAttachmentIdList;                  //多选附件
            addReqData.attachmentName = reqAttachmentIdListName.join(' ');
            console.log(reqAttachmentIdList.join(' '));console.log(reqAttachmentIdListName.join(' '));
            
            addReqData.updatePerson=$cookie.get("userId");                      //修改人
            //富文本编辑，因list组件会识别table，tr，td标签；所以要要吧这些标签替换成其他标签，变成表格展示要在变回来；
            addReqData.stepDescription=editor.getContent().replace(/\<table/g, '\<aside').replace(/\<\/table/g, '\<\/aside').replace(/\<tr/g, '\<rt').replace(/\<\/tr/g, '\<\/rt').replace(/\<td/g, '\<dt').replace(/\<\/td/g, '\<\/dt');
            addReqData.systemId=editReqData.projectId;
            var saveAddRequrieDiaConfig = {
                mode: 'confirm', // 对话框模式，默认normal标准|confirm浮动层|confirm确认对话框
                title:'提示',
                width: 300, //对话框宽度，可选项。normal默认值为600，confirm默认值为300，tips默认值为240
                height: 120, //对话框高度，可选项。normal默认值为400，confirm默认值为180，tips默认值为80
                cancelDisplay: false, //是否显示取消按钮（强制执行，可在confirm模式下生效），可选项。 默认true(显示)
                modal:true,
                content: '' ,// 对话框内容，可以是字符串、html片段、或dom对象,默认为loading状态（点组成的圈）
            };

            Util.ajax.postJson(AjaxPath.demand+"/testCases/"+editReqData.id, JSON.stringify(addReqData), function(result, isok) {
                handLoading.destroy();
                if(result.returnCode==="0000") {
                    saveAddRequrieDiaConfig.content = '<div style="text-align:center;margin-top:50px">'+result.returnMessage+'</div>'
                    saveAddRequrieDia = new Dialog(saveAddRequrieDiaConfig);
                    saveAddRequrieDia.on('onclose',function(){
                        back();
                    });
                } else {
                    saveAddRequrieDiaConfig.content = '<div style="text-align:center;margin-top:50px">'+result.returnMessage+'</div>'
                    saveAddRequrieDia = new Dialog(saveAddRequrieDiaConfig);
                }
            },"application/json");
        };

        // 测试步骤：富文本编辑
        var testStep=function(){
                 editor = new Editor({
                    el:$("#editTestStep",$el), //要绑定的容器(必须)
                    mode:'mini',     //编辑器模式 mini|middle|normal(默认)
                    wordCount:'text', //字数统计。默认值为true，取得字数包含HTML代码;为false时关闭字数统计功能;为”text”时(1.1.1版本新增)只包含纯文本、IMG、EMBED。
                    //maximumWords:10000,//{Number} [默认值：10000]允许的最大字符数
                    addTools:['source', '|', 'preview', 'cut', 'copy', 'paste','plainpaste', 'wordpaste', '|','insertorderedlist', 'insertunorderedlist', 'subscript','superscript','selectall', '|','strikethrough', '|','table', 'hr','link', 'unlink', '|', 'about'],   //在mode的基础上再添加工具类(mode为normal时，已经包含了所有的工具，该配置不生效)
                    //富文本编辑，因list组件会识别table，tr，td标签；所以要要吧这些标签替换成其他标签，变成表格展示要在变回来；
                    content: editReqData.stepDescription.replace(/\<aside/g, '\<table').replace(/\<\/aside/g, '\<\/table').replace(/\<rt/g, '\<tr').replace(/\<\/rt/g, '\<\/tr').replace(/\<dt/g, '\<td').replace(/\<\/dt/g, '\<\/td')  //要在富文本框中显示的默认值JSON.stringify(editor.getContent()).replace(/\<td\>/g, '\<th\>');
                });
        };

        //日志列表
        var initList = function(){
            list = new List({
                el: $('.editCaseLogList', $el),
                ajax: {    //所有jquery.ajax的配置项均可配置，这些配置将替换底层组件的配置；慎用
                    method:'GET'
                },
                field: {
                    boxType: 'radio',
                    key: 'id',
                    items: [
                        {
                            text: '操作人',
                            name: 'createrName',
                            className: 'w90',
                            // sorting:1,
                            width:100,
                            click: function (e, val,item) {
                                // console.log(e,item)
                                // creatDialog(e, item);
                            },
                            render: function (item, val) {
                                return val;
                            }
                        },
                        {
                            text: '记录',
                            name: 'content',
                            className: 'w90 text-break',
                            width:1000,
                            render: function (item, val) {

                                var str = "";
                                str += '<div class="fn-left">于&nbsp;&nbsp;' + new Date(item.createTime).Format('yyyy-MM-dd hh:mm:ss') + '&nbsp;&nbsp;' + item.typeName + '了&nbsp;&nbsp;' + item.businessType + '：' + '<a href="javascript:;" data="'+ item.businessId +'" class="viewSubTaskBtn">'+ item.businessTitle +'</a>' + item.content +'</div>';
                                return str;
                            }
                        }]
                },
                page: {
                    customPages: [2, 3, 5, 10, 15, 20, 30, 50], //可选择每页显示多少条
                    perPage: 5, //默认每页显示多少条记录
                    total: true
                },
                data: {
                    url: AjaxPath.project + '/logInfo/query?businessId='+ editReqData.id +'&businessType=testcase'
                }
            })
            list.search();
             $(".editCaseLogList" ,$el).find(".sn-list-header").hide(); //隐藏表头；   
        };
        //点击日志列表中表格1，表格2
        var listButton=function(e){
            var tableHtml=$(this).next();
            // tableHtml.find('tr[class^="oddTr"]').remove();  //去掉list组件自动加的<tr class='oddTr'>
            // tableHtml.find('tr[class^="evenTr"]').remove();
            // console.log($(this).next().html());
            // console.log(tableHtml.html().replace(/\<aside/g, '\<table').replace(/\<\/aside/g, '\<\/table').replace(/\<rt/g, '\<tr').replace(/\<\/rt/g, '\<\/tr').replace(/\<dt/g, '\<td').replace(/\<\/dt/g, '\<\/td') );
            
            //富文本编辑，因list组件会识别table，tr，td标签；所以要要吧这些标签替换成其他标签，变成表格展示要在变回来；
            var tabHtml=tableHtml.html().replace(/\<aside/g, '\<table').replace(/\<\/aside/g, '\<\/table').replace(/\<rt/g, '\<tr').replace(/\<\/rt/g, '\<\/tr').replace(/\<dt/g, '\<td').replace(/\<\/dt/g, '\<\/td');
            var config = {
                mode: 'confirm', //对话框模式，默认normal标准|tips浮动层|confirm确认对话框
                title: '查看表格', //对话框标题，
                content:tabHtml, //对话框内容，可以是字符串、html代码段,tpl对象。默认为loading状态（由点组成的圈。大段代码建议使用 tpl。
                ok: function() {
                    return true;
                },
                cancel: function() {
                    return true;
                },
                cancelValue: '取消', //取消按钮的文本 默认是 ‘关闭’
                okValue: '确定', //取消按钮的文本 默认是 ‘关闭’
                cancelDisplay: false, //是否显示取消按钮 默认true显示|false不显示
                width: 1000, //对话框宽度，normal默认值为600，confirm默认值为300，tips默认值为240
                height: 250, //对话框高度，normal默认值为400，confirm默认值为180，tips默认值为80
                maxWidth: 1000,//设置tips对话框的最大宽度,默认为240px。仅在tips对话框下生效，该项存在时，width属性将失效。
                maxHeight: 'auto', //设置tips对话框的最大高度,默认为auto。仅在tips对话框下生效，该项存在时，height属性将失效。
                padding:'0 16px 1em 10px',//(默认值: 继承 css 文件设置) 设置消息内容与消息容器的填充边距，即 style padding属性
                align: 'bottom left',//设置对话框与其他元素的对齐方式。仅在show(elem)与showModal(elem)传入元素时生效。默认值: "bottom left"。可选："top left" "top" "top right" "right top" "right" "right bottom" "bottom right" "bottom" "bottom left" "left bottom" "left" "left top"。
                skin: 'dialogSkin dialogSkin2',//设置对话框额外的className参数,多个className请使用空格隔开。
                fixed: false, //是否开启固定定位 默认false不开启|true开启
                quickClose: false, //点击空白处快速关闭 默认false不关闭|true关闭
                modal: true ,//是否开启模态框状态  默认false不开启|true开启,confirm默认状态为true
                backdropBackground:'#000',//设置遮罩颜色，默认 #000。
                backdropOpacity:0.7, //设置遮罩透明度，默认 0.7，取值范围：0~1 。
                beforeOpen: function() {
                }, //对话框打开之前执行。
                escClose:true,//esc键快速关闭对话框，默认为true
                zIndex:990   // 对话框的z-index值，默认是1024。
            };
            dialog = new Dialog(config);
            $('div[i="dialog"] div[i="content"]').find('table').css({border:'1px solid'});  //在展示的表格上加border；
            $('div[i="dialog"] div[i="content"]').find('table td').css({border:'1px solid'});

        }
        //点击日志列表，切换：所有，改动记录，备注；
        var logListTab = function(){
            var data={};
            $(this).addClass('actived').siblings().removeClass('actived');
            data.type = $(this).attr("data");
            list.search(data);
        }
        
        //点击备注按钮
        var createReqMomeDialog = function () {
            require(['text!tpl/case/addMemo.tpl'], function(addMomo){
                var data = {};
                data.formClassName = "memoForm";
                data.textareaName = "comment";
                var config = {
                    mode: 'confirm', //对话框模式，默认normal标准|tips浮动层|confirm确认对话框
                    title: '添加备注', //对话框标题，
                    content: Util.hdb.compile(addMomo)(data), //对话框内容，可以是字符串、html代码段,tpl对象。默认为loading状态（由点组成的圈。大段代码建议使用 tpl。
                    ok: function() {
                        console.log('点击了确定按钮');
                        if(editSubTaskMomeValidor.form()) {
                            createReqMome();
                        } else {
                            console.log('验证失败');
                        }
                        return false;
                    },
                    cancel: function() {
                        return true;
                    },
                    cancelValue: '取消', //取消按钮的文本 默认是 ‘关闭’
                    okValue: '确定', //取消按钮的文本 默认是 ‘关闭’
                    cancelDisplay: true, //是否显示取消按钮 默认true显示|false不显示
                    width: 600, //对话框宽度，normal默认值为600，confirm默认值为300，tips默认值为240
                    height: 140, //对话框高度，normal默认值为400，confirm默认值为180，tips默认值为80
                    maxWidth: 240,//设置tips对话框的最大宽度,默认为240px。仅在tips对话框下生效，该项存在时，width属性将失效。
                    maxHeight: 'auto', //设置tips对话框的最大高度,默认为auto。仅在tips对话框下生效，该项存在时，height属性将失效。
                    padding:'0 16px 1em 10px',//(默认值: 继承 css 文件设置) 设置消息内容与消息容器的填充边距，即 style padding属性
                    align: 'bottom left',//设置对话框与其他元素的对齐方式。仅在show(elem)与showModal(elem)传入元素时生效。默认值: "bottom left"。可选："top left" "top" "top right" "right top" "right" "right bottom" "bottom right" "bottom" "bottom left" "left bottom" "left" "left top"。
                    skin: 'dialogSkin dialogSkin2',//设置对话框额外的className参数,多个className请使用空格隔开。
                    fixed: false, //是否开启固定定位 默认false不开启|true开启
                    quickClose: false, //点击空白处快速关闭 默认false不关闭|true关闭
                    modal: true ,//是否开启模态框状态  默认false不开启|true开启,confirm默认状态为true
                    backdropBackground:'#000',//设置遮罩颜色，默认 #000。
                    backdropOpacity:0.7, //设置遮罩透明度，默认 0.7，取值范围：0~1 。
                    beforeOpen: function() {
                        console.log('对话框打开时执行。');
                        // subTaskAssSelect();
                    }, //对话框打开之前执行。
                    escClose:true,//esc键快速关闭对话框，默认为true
                    zIndex:990   // 对话框的z-index值，默认是1024。
                };
                dialog = new Dialog(config);
                createReqMomeValidation();
            })
        };
        //备注表单验证；
        var createReqMomeValidation = function() {
            var config = {
                // el: $('.validatorForm'),
                el: $(".memoForm"),
                // submitBtn: $(".btnSave"), //触发验证的按钮，可不配置
                dialog: true, //是否弹出验证结果对话框
                rules: {
                    comment: "required"
                },
                messages: {
                    comment: {
                        required: "备注不能为空！"
                    }
                }
            };
            editSubTaskMomeValidor = new Validator(config);
        };
        //浮层点击ok，保存备注；
        var createReqMome = function(){
            var config = null;
            var data = Form.serialize($('.memoForm'));
            data.id = editReqData.id;
            data.businessType = 'testcase';
            data.caseName = $("input[name='caseName']", $el).val();
            data.createPerson = $cookie.get('userId');
            Util.ajax.postJson(AjaxPath.demand + '/testCases/addComment', JSON.stringify(data), function(result, isok){
                if(result.returnCode==="0000"){
                    dialog.remove();
                    list.search();
                    $('.logListTab li').eq(0).addClass('actived').siblings().removeClass('actived');
                }else {
                    config = {
                        mode: 'confirm', // 对话框模式，默认normal标准|confirm浮动层|confirm确认对话框
                        title:'提示',
                        width: 300, //对话框宽度，可选项。normal默认值为600，confirm默认值为300，tips默认值为240
                        height: 120, //对话框高度，可选项。normal默认值为400，confirm默认值为180，tips默认值为80
                        cancelDisplay: false, //是否显示取消按钮（强制执行，可在confirm模式下生效），可选项。 默认true(显示)
                        modal:true,
                        content: '<div style="text-align:center;margin-top:50px">'+result.returnMessage+'</div>' ,// 对话框内容，可以是字符串、html片段、或dom对象,默认为loading状态（点组成的圈）
                    };
                    dialog = new Dialog(config);
                }
            }, 'application/json')
        }        


        //分配弹框
        var createReqAssDialog = function(e){
            require(['text!tpl/case/addAss.tpl'], function(taskAss){
            var data = {};
            data.formClassName = "addAssForm";
            data.selectName = "addAssFormExcutorList";
            var config = {
                mode: 'confirm', //对话框模式，默认normal标准|tips浮动层|confirm确认对话框
                title: '用例分配', //对话框标题，
                content: Util.hdb.compile(taskAss)(data), //对话框内容，可以是字符串、html代码段,tpl对象。默认为loading状态（由点组成的圈。大段代码建议使用 tpl。
                ok: function() {
                    createSubTaskAss(editReqData);
                    return true;
                },
                cancel: function() {
                    return true;
                },
                cancelValue: '取消', //取消按钮的文本 默认是 ‘关闭’
                okValue: '确定', //取消按钮的文本 默认是 ‘关闭’
                cancelDisplay: true, //是否显示取消按钮 默认true显示|false不显示
                width: 400, //对话框宽度，normal默认值为600，confirm默认值为300，tips默认值为240
                height: 200, //对话框高度，normal默认值为400，confirm默认值为180，tips默认值为80
                maxWidth: 240,//设置tips对话框的最大宽度,默认为240px。仅在tips对话框下生效，该项存在时，width属性将失效。
                maxHeight: 'auto', //设置tips对话框的最大高度,默认为auto。仅在tips对话框下生效，该项存在时，height属性将失效。
                padding:'0 16px 1em 10px',//(默认值: 继承 css 文件设置) 设置消息内容与消息容器的填充边距，即 style padding属性
                align: 'bottom left',//设置对话框与其他元素的对齐方式。仅在show(elem)与showModal(elem)传入元素时生效。默认值: "bottom left"。可选："top left" "top" "top right" "right top" "right" "right bottom" "bottom right" "bottom" "bottom left" "left bottom" "left" "left top"。
                skin: 'dialogSkin dialogSkin2',//设置对话框额外的className参数,多个className请使用空格隔开。
                fixed: false, //是否开启固定定位 默认false不开启|true开启
                quickClose: false, //点击空白处快速关闭 默认false不关闭|true关闭
                modal: true ,//是否开启模态框状态  默认false不开启|true开启,confirm默认状态为true
                backdropBackground:'#000',//设置遮罩颜色，默认 #000。
                backdropOpacity:0.7, //设置遮罩透明度，默认 0.7，取值范围：0~1 。
                beforeOpen: function() {
                    subTaskAssSelect();
                }, //对话框打开之前执行。
                escClose:true,//esc键快速关闭对话框，默认为true
                zIndex:990   // 对话框的z-index值，默认是1024。
            };
            dialog = new Dialog(config);
        })
        }

        var createSubTaskAss = function(datas){
            var data = Form.serialize($('.addAssForm'));

            Util.ajax.getJson(AjaxPath.demand + '/testCases/shareCase/'+ datas.id+'?updater='+$cookie.get("userId")+'&tryPeople='+data.tryPeople, function(result, isok) {
                if(result.returnCode==="0000") {
                    var config = {
                        mode: 'confirm', // 对话框模式，默认normal标准|confirm浮动层|confirm确认对话框
                        title:'提示',
                        width: 300, //对话框宽度，可选项。normal默认值为600，confirm默认值为300，tips默认值为240
                        height: 120, //对话框高度，可选项。normal默认值为400，confirm默认值为180，tips默认值为80
                        cancelDisplay: false, //是否显示取消按钮（强制执行，可在confirm模式下生效），可选项。 默认true(显示)
                        modal:true,
                        content: '<div style="text-align:center;margin-top:50px">'+result.returnMessage+'</div>' ,// 对话框内容，可以是字符串、html片段、或dom对象,默认为loading状态（点组成的圈）
                    };
                    dialog = new Dialog(config);
                    excutorChangeSelect.setValue(['key',data.tryPeople]);
                    list.search();
                } else {
                    var config = {
                        mode: 'confirm', // 对话框模式，默认normal标准|confirm浮动层|confirm确认对话框
                        title:'提示',
                        width: 300, //对话框宽度，可选项。normal默认值为600，confirm默认值为300，tips默认值为240
                        height: 120, //对话框高度，可选项。normal默认值为400，confirm默认值为180，tips默认值为80
                        cancelDisplay: false, //是否显示取消按钮（强制执行，可在confirm模式下生效），可选项。 默认true(显示)
                        modal:true,
                        content: '<div style="text-align:center;margin-top:50px">'+result.returnMessage+'</div>' ,// 对话框内容，可以是字符串、html片段、或dom对象,默认为loading状态（点组成的圈）
                    };
                    dialog = new Dialog(config);
                }
            });
        };

        var subTaskAssSelect = function(){
            editSubTaskAssSelect = new Select({
                el:$("#addAssFormExcutorList"),       //要绑定的容器
                ajax:{    //所有jquery.ajax的配置项均可配置，这些配置将替换底层组件的配置，<span class="s">慎用</span>
                    method:'GET'
                },
                label:'<i style="color:red;padding:2px;"></i>分配给:', //下拉框单元左侧label文本，可不配置
                selectText:false,       //是否显示  ‘选择|清除’  模式
                name:'tryPeople',    //下拉框单元右侧下拉框名称
                disabled:false,     //组件是否被禁用
                topOption:"", //设置最顶部option的text属性
                value:0,//初始选中项设置 默认是按value，如果你想按id设置 也可以 value:[&quot;id&quot;,1],这样设置
                textField:"value",   //设置下拉框内容，填写数据中对应的字段名
                valueField:"key",//设置下拉框value，填写数据中对应的字段名
                datas: tryPeopleData,         //数据源
                loadAtClick:false,// true--第一次点击时渲染|false或不配置--初始化时渲染
                dataReady:function(){
                }
            });
            editSubTaskAssSelect.setValue(['key',editReqData.excutor]); //editReqData.tryPeople
        };

        //获取状态按钮；
        var getEditTaskNextStatus = function(data){
            console.log(listData); 
            var str = "";

            if(data){
                if(data.flowActions.length===0){
                    str = "&nbsp;";
                }else{
                    if(data.flowActions[0].description){
                        str = '<a href="javascript:;" class="t-btn t-btn-white" data="'+ data.flowActions[0].toValue +'">'+ data.flowActions[0].description +'</a>'; 
                    }
                }
            }else {
                if(listData.flowActions.length===0){
                    str = "&nbsp;";
            }else{
                if(listData.flowActions[0].description){
                    str = '<a href="javascript:;" class="t-btn t-btn-white" data="'+ listData.flowActions[0].toValue +'">'+ listData.flowActions[0].description +'</a>'; 
                }
            }
            }
            $(".caseStatusButton", $el).html(str);    
        };
        //点击状态按钮；
        var bindEditTaskNextStatus = function(e){
            var config = null;
           var status = $(this).attr("data"); //点击按钮的id
            Util.ajax.getJson(AjaxPath.demand + '/testCases/updateStatus/'+editReqData.id+'?updater='+$cookie.get("userId")+'&status='+status, function(result){   
                if (result.returnCode==="0000") {
                    config = {
                        mode: 'confirm', // 对话框模式，默认normal标准|confirm浮动层|confirm确认对话框
                        title:'提示',
                        width: 300, //对话框宽度，可选项。normal默认值为600，confirm默认值为300，tips默认值为240
                        height: 120, //对话框高度，可选项。normal默认值为400，confirm默认值为180，tips默认值为80
                        cancelDisplay: false, //是否显示取消按钮（强制执行，可在confirm模式下生效），可选项。 默认true(显示)
                        modal:true,
                        content: '<div style="text-align:center;margin-top:50px">'+result.returnMessage+'</div>' ,// 对话框内容，可以是字符串、html片段、或dom对象,默认为loading状态（点组成的圈）
                    };
                    dialog = new Dialog(config); 
                    
                    dialog.on('onclose',function(){
                        Util.ajax.getJson(AjaxPath.demand + "/testCases?systemId="+editReqData.projectId+'&caseNum='+editReqData.caseNum, function(result){
                          getEditTaskNextStatus(result.beans[0]); 
                        });
                        //重新加载状态下拉框并设现在状态；
                        Util.ajax.getJson( AjaxPath.project+'/dropdown?modual=testCase&type=caseStatus&flowSwitch=true&systemId='+editReqData.projectId+'&flowFrom='+status, {}, function(result, isok){
                            statusChangeSelect = new Select({
                                el:$("#statusList", $el),       //要绑定的容器
                                ajax:{    //所有jquery.ajax的配置项均可配置，这些配置将替换底层组件的配置，<span class="s">慎用</span>
                                    method:'GET'
                                },
                                label:'<i style="color:red;padding:2px;">*</i>状态:', //下拉框单元左侧label文本，可不配置
                                selectText:false,       //是否显示  ‘选择|清除’  模式
                                name:'caseStatus',    //下拉框单元右侧下拉框名称
                                disabled:false,     //组件是否被禁用
                                topOption:"请选择", //设置最顶部option的text属性
                                value:'',//初始选中项设置 默认是按value，如果你想按id设置 也可以 value:[&quot;id&quot;,1],这样设置
                                textField:"value",   //设置下拉框内容，填写数据中对应的字段名
                                valueField:"key",//设置下拉框value，填写数据中对应的字段名
                                datas: result.beans,         //数据源
                                loadAtClick:false,// true--第一次点击时渲染|false或不配置--初始化时渲染
                                dataReady:function(){
                                    console.log("获取状态")
                                }
                            });
                            statusChangeSelect.setValue(['key',status]);
                        });
                    });

                }else{
                    config = {
                        mode: 'confirm', // 对话框模式，默认normal标准|confirm浮动层|confirm确认对话框
                        title:'提示',
                        width: 300, //对话框宽度，可选项。normal默认值为600，confirm默认值为300，tips默认值为240
                        height: 120, //对话框高度，可选项。normal默认值为400，confirm默认值为180，tips默认值为80
                        cancelDisplay: false, //是否显示取消按钮（强制执行，可在confirm模式下生效），可选项。 默认true(显示)
                        modal:true,
                        content: '<div style="text-align:center;margin-top:50px">'+result.returnMessage+'</div>' ,// 对话框内容，可以是字符串、html片段、或dom对象,默认为loading状态（点组成的圈）
                    };
                    dialog = new Dialog(config);
                }
            })
        }

        //折叠
        var bindTableSwitch = function(e){
            $(this).toggleClass('tri-left');
            $(this).parent('.t-list-title').siblings().stop().slideToggle();
        };
        var createLoading = function(){
            loadingConfig = {
                el:'body',                  //组件要绑定的容器，默认为body（此项可不配置或留空）
                className:'loading',           //组件外围的className
                position:'center',      //提示信息位置，顶部top|默认center中央
                width:'300',      //loading的宽度,非必须，默认300
                height:'auto',      //loading的宽度,非必须，默认auto
                mask:1,                 //是否显示遮罩， 0不显示|默认1显示
                animate:1,              //是否显示动画效果， 0不显示|默认1显示
                mode:'layer',     //展示方式 loadingLine线条方式|默认layer弹层方式
                text:'加载中...',       //提示文字，默认 加载中...
                icon:'dotCycle',  //文字前面的gif动画， 默认dotCycle有点组成的圈|cmcc移动图标|cmccLarge大的移动图标
            }
        };
        return initialize;
});